package com.bbs.common.vo;

import lombok.Builder;
import lombok.Data;

/**
 * Lombok 的 @Builder 注解主要用于简化 构建器模式（Builder Pattern）的实现。
 * 构建器模式允许我们通过 链式方法 调用一步步设置对象的属性，
 * 然后最终调用 build() 方法创建对象。
 * 这种模式的好处是它让对象创建过程更加清晰，尤其是对象有很多属性的时候，可以避免构造函数参数列表过长或顺序不清晰的问题。
 */

/**
 * builder() 方法是 Lombok 自动生成的一个静态方法，
 * 用于返回一个新的构建器实例。
 * 该实例是生成的 DataResultBuilder，可以通过链式调用设置字段值
 */

/**
 * build() 方法是 DataResultBuilder 类中的一个方法。
 * 它的作用是创建并返回一个包含所有设置属性的 DataResult 实例。
 * 调用 build() 会构造出一个新的 DataResult 对象，
 * 并把在构建器中设置的所有值传递给这个对象
 */

@Data
@Builder
public class DataResult {

    private Integer code;
    private String msg;
    private Object data;


    public static DataResult success() {
        return DataResult.builder()
                .code(0)
                .msg("请求成功")
                .build();
    }

    public static DataResult success(Object data) {
        return DataResult.builder()
                .code(0)
                .msg("请求成功")
                .data(data)
                .build();
    }

    public static DataResult fail() {
        return DataResult.builder()
                .code(-1)
                .msg("请求失败")
                .build();
    }

    public static DataResult fail(String msg) {
        return DataResult.builder()
                .code(-1)
                .msg(msg)
                .build();
    }

    public static DataResult fail(int code, String msg) {
        return DataResult.builder()
                .code(code)
                .msg(msg)
                .build();
    }
}
